Optimizer

Optimizer 란?

**Optimizer(최적화 알고리즘)**는 신경망 모델의 가중치(weights)와 편향(bias)을 업데이트하는 방법을 결정하는 알고리즘이다. 손실 함수(loss function)의 기울기(gradient)를 계산하고, 이를 바탕으로 모델 파라미터를 조정하여 손실을 최소화한다.

Gradient Descent

**Gradient Descent(경사 하강법)**는 가장 기본적인 최적화 알고리즘이다.

  • 원리: 손실 함수의 기울기(경사)를 따라 내려가면서 최소값을 찾는다
  • 수식: wt+1=wtηwL(wt)w_{t+1} = w_t - \eta \nabla_w L(w_t)
    • wtw_t: 현재 가중치
    • η\eta: 학습률(learning rate)
    • wL(wt)\nabla_w L(w_t): 손실 함수의 기울기
  • 특징:
    • 전체 데이터셋을 사용하여 기울기를 계산한다 (Batch Gradient Descent)
    • 안정적이지만 계산 비용이 크고, 지역 최소값에 빠질 수 있다
    • 학습률이 고정되어 있어 수렴 속도가 느릴 수 있다

SGD: Stochastic Gradient Descent

**SGD(확률적 경사 하강법)**는 Gradient Descent의 변형이다.

  • 원리: 전체 데이터셋 대신 하나의 샘플을 무작위로 선택하여 기울기를 계산한다
  • 수식: wt+1=wtηwL(wt,xi,yi)w_{t+1} = w_t - \eta \nabla_w L(w_t, x_i, y_i)
    • (xi,yi)(x_i, y_i): 무작위로 선택된 하나의 샘플
  • 특징:
    • 계산이 빠르고 메모리 사용량이 적다
    • 노이즈가 있어 지역 최소값에서 탈출할 수 있다
    • 수렴이 불안정하고 진동이 발생할 수 있다
    • Mini-batch SGD: 여러 샘플을 묶어서 사용하는 중간 형태가 일반적이다

Momentum

**Momentum(모멘텀)**은 물리학의 관성 개념을 적용한 최적화 알고리즘이다.

  • 원리: 과거의 기울기 방향을 기억하여 일관된 방향으로 이동한다
  • 수식:
    • vt=βvt1+ηwL(wt)v_t = \beta v_{t-1} + \eta \nabla_w L(w_t)
    • wt+1=wtvtw_{t+1} = w_t - v_t
    • β\beta: 모멘텀 계수(보통 0.9)
  • 특징:
    • 진동을 줄이고 수렴 속도를 향상시킨다
    • 지역 최소값을 넘어서 더 나은 최소값을 찾을 수 있다
    • SGD보다 안정적이고 빠른 수렴을 보인다

Adagrad

**Adagrad(Adaptive Gradient)**는 각 파라미터마다 학습률을 자동으로 조정한다.

  • 원리: 자주 업데이트되는 파라미터는 작은 학습률을, 드물게 업데이트되는 파라미터는 큰 학습률을 사용한다
  • 수식:
    • Gt=Gt1+(wL(wt))2G_t = G_{t-1} + (\nabla_w L(w_t))^2
    • wt+1=wtηGt+ϵwL(wt)w_{t+1} = w_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \nabla_w L(w_t)
    • GtG_t: 지금까지의 기울기 제곱의 누적합
    • ϵ\epsilon: 0으로 나누는 것을 방지하는 작은 값
  • 특징:
    • 희소한(sparse) 데이터에 효과적이다
    • 학습률이 시간이 지날수록 작아져서 학습이 멈출 수 있다
    • 학습률을 수동으로 조정할 필요가 없다

RMSProp

**RMSProp(Root Mean Square Propagation)**는 Adagrad의 단점을 개선한 알고리즘이다.

  • 원리: 과거 기울기의 제곱을 지수 이동 평균으로 계산하여 최근 기울기에 더 큰 가중치를 부여한다
  • 수식:
    • E[g2]t=βE[g2]t1+(1β)(wL(wt))2E[g^2]_t = \beta E[g^2]_{t-1} + (1-\beta)(\nabla_w L(w_t))^2
    • wt+1=wtηE[g2]t+ϵwL(wt)w_{t+1} = w_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} \nabla_w L(w_t)
    • β\beta: 감쇠율(보통 0.9)
  • 특징:
    • Adagrad의 학습률 감소 문제를 해결한다
    • 비정상(non-stationary) 문제에 효과적이다
    • 순환 신경망(RNN)에서 좋은 성능을 보인다

Adam

**Adam(Adaptive Moment Estimation)**는 Momentum과 RMSProp를 결합한 알고리즘이다.

  • 원리: 기울기의 1차 모멘트(평균)와 2차 모멘트(분산)를 모두 추정하여 적응적 학습률을 사용한다
  • 수식:
    • mt=β1mt1+(1β1)wL(wt)m_t = \beta_1 m_{t-1} + (1-\beta_1) \nabla_w L(w_t) (1차 모멘트)
    • vt=β2vt1+(1β2)(wL(wt))2v_t = \beta_2 v_{t-1} + (1-\beta_2)(\nabla_w L(w_t))^2 (2차 모멘트)
    • m^t=mt1β1t\hat{m}_t = \frac{m_t}{1-\beta_1^t}, v^t=vt1β2t\hat{v}_t = \frac{v_t}{1-\beta_2^t} (편향 보정)
    • wt+1=wtηv^t+ϵm^tw_{t+1} = w_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t
    • β1\beta_1: 보통 0.9, β2\beta_2: 보통 0.999
  • 특징:
    • 가장 널리 사용되는 최적화 알고리즘이다
    • 빠른 수렴 속도와 안정적인 성능을 보인다
    • 하이퍼파라미터 튜닝이 비교적 쉽다
    • 대부분의 딥러닝 문제에서 좋은 성능을 보인다

Optimizer 비교

Optimizer수렴 속도안정성메모리특징
Gradient Descent느림높음높음전체 데이터셋 사용, 안정적
SGD보통낮음낮음빠르지만 불안정, 진동 발생
Momentum빠름보통낮음진동 감소, 일관된 방향 이동
Adagrad보통보통보통희소 데이터에 효과적, 학습률 감소 문제
RMSProp빠름높음보통Adagrad 개선, 비정상 문제에 효과적
Adam매우 빠름높음보통가장 널리 사용, Momentum + RMSProp 결합

선택 가이드

  • 작은 데이터셋, 간단한 모델: SGD 또는 Momentum
  • 희소한 데이터: Adagrad
  • 순환 신경망(RNN): RMSProp
  • 대부분의 경우: Adam (권장)
  • 안정적인 학습이 중요한 경우: Gradient Descent 또는 Momentum